YAHOO.namespace('Tesis.modelador');

YAHOO.Tesis.modelador.tipoDocumentoTable = function(elContainer, messagesTipoDocumento, listado) {
    this.messages = messagesTipoDocumento;
    this.listado = listado;
    YAHOO.Tesis.modelador.tipoDocumentoTable.superclass.constructor.call(this, elContainer,
    this.construirColumnDefs(), this.construirDataSource(), this.construirConfig());
   
    
};

YAHOO.lang.extend(YAHOO.Tesis.modelador.tipoDocumentoTable, YAHOO.Tesis.ListTableBase, {
    eliminarTipoDocumentos: function (idtipoDocumento){
       for( var i = 0; i < this.getRecordSet().getLength(); i++ ){
            record = this.getRecordSet().getRecord(i);
             if (record.getData('idTipoDocumento') == idtipoDocumento){
                    this.deleteRow(i);
                break;
             }
        }
       
    },
    editarTipoDocumento: function (tipoDocumentoDTO){ 
      parent.tipoDocumentoEdit = tipoDocumentoDTO; 
      usuariosDialog = new YAHOO.Tesis.dialog('usuariosDialog',Tesis.contextPath + '/pages/modelador/crearTipoDocumento' ,700,400);
      usuariosDialog.show();

    },
    
    doBeforeLoadData: function(oRequest, oResponse, oPayload) {
        oPayload.totalRecords = oResponse.meta.totalRecords;
        oPayload.pagination.recordOffset = oResponse.meta.startIndex;
        $("#cantidadRegistros").html(messages.tipoDocumentoTable.totalRegistros +" "+oPayload.totalRecords);
        return oPayload;
    },
    
     accionesFormatter: function(liner, record, column, data) {
        var self = this;
        var linerElement = new YAHOO.util.Element(liner);
       
        linerElement.get('element').innerHTML =
        "<table style='margin-left:auto; margin-right:auto; width: 50px; border:0px !important;'><tr><td><div class='editar'></div></td><td><div class='eliminar'></div></td></tr></table>";
        
        linerElement.delegate('click', function() {
            var idTipoDocumento=record.getData('idTipoDocumento');  
         
            self.eliminarTipoDocumentos(idTipoDocumento);
        }, '.eliminar');
        self.setAccionTooltip(linerElement,  '.eliminar', "eliminar", 5000);
        
        linerElement.delegate('click', function() {          
            var tipoDocumentoDTO = {};
        
            tipoDocumentoDTO['idTipoDocumento'] =  record.getData('idTipoDocumento');
            tipoDocumentoDTO['nombre']  = record.getData('nombre');
            tipoDocumentoDTO['descripcion']  = record.getData('descripcion');
            
            var lstEstadoDocumento = record.getData('lstEstadoDocumentoDTO');
            tipoDocumentoDTO['cantidadEstados']  = lstEstadoDocumento.length;
            for( var j = 0; j < lstEstadoDocumento.length; j++ ){
               tipoDocumentoDTO['lstEstadoDocumentoDTO['+j+'].idestadodocumentoTemp'] = lstEstadoDocumento[j].idestadodocumentoTemp;
               tipoDocumentoDTO['lstEstadoDocumentoDTO['+j+'].nombre'] = lstEstadoDocumento[j].nombre;
               tipoDocumentoDTO['lstEstadoDocumentoDTO['+j+'].descripcion'] = lstEstadoDocumento[j].descripcion;
            }
            self.editarTipoDocumento(tipoDocumentoDTO);
        }, '.editar');
        self.setAccionTooltip(linerElement,  '.editar', "editar", 5000);
        
    },
    construirColumnDefs: function() {
        return [
          
            {
                key: 'idTipoDocumento' ,
                hidden: true
            },
            
            {
                key: 'nombre',
                label: 'Nombre'
            },
            {
                key: 'descripcion',
                label: 'Descripcion'
            },
            {
                key: 'lstEstadoDocumentoDTO',
                hidden: true
            },
            {
                key: 'acciones',
                label: this.messages.tipoDocumentoTable.columna.accion,
                minWidth: 70,
                maxWidth: 70,
                className: 'accionesColumn',
                formatter: this.accionesFormatter
            }
        ];
    },
    construirDataSource: function() {
        var dataSource = new YAHOO.util.XHRDataSource(Tesis.contextPath + "/pages/cargo/find?");
        dataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;


        dataSource.responseSchema = {
            resultsList: "lstCargosDTO",
            metaFields: {
                totalRecords: "totalRecords",
                startIndex: "startIndex"
            },
            fields: [ {key: 'idTipoDocumento'}, {key: 'nombre'}, {key: 'descripcion'}, {key : 'lstEstadoDocumentoDTO'}]
        };

        return dataSource;
    },
    construirConfig: function() {

        return {
            MSG_LOADING: 'Cargando...',
            MSG_EMPTY :'No se encontraron datos.',
            MSG_ERROR: "Error cargando datos, es muy probable que la sesión haya expirado.. <a href='" + Tesis.contextPath + "/pages/public/login'>Haga clic aquí para volver a acceder al sistema.</a>",
            generateRequest: this.generarRequest,
            initialLoad: false,
            initialRequest:this.generarRequest(),
            dynamicData: true,
            paginator : new YAHOO.widget.Paginator({
                rowsPerPage: this.messages.tipoDocumentoTable.paginacion.filasxpagina,
                containers:  "cargosPaginator", //contenedor
                firstPageLinkLabel: this.messages.tipoDocumentoTable.paginacion.inicio,
                lastPageLinkLabel: this.messages.tipoDocumentoTable.paginacion.fin,
                previousPageLinkLabel: this.messages.tipoDocumentoTable.paginacion.anterior,
                nextPageLinkLabel: this.messages.tipoDocumentoTable.paginacion.siguiente,
                pageLinkClass: 'pageLinkClass',
                template: "{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}"
            })
        }
    },
    generarRequest: function(oState, oSelf) {
      oState = oState || {
            pagination: null,
            sortedBy: null
        };

        var sort = (oState.sortedBy) ? oState.sortedBy.key : "idCargo";
        var dir = (oState.sortedBy && oState.sortedBy.dir === YAHOO.widget.DataTable.CLASS_DESC) ? "desc" : "asc";
        var startIndex = (oState.pagination) ? oState.pagination.recordOffset : 0;
        var results = (oState.pagination) ? oState.pagination.rowsPerPage : this.messages.tipoDocumentoTable.paginacion.filasxpagina;
        var nombre =$('#nombre').val();
        

        var forceIERequest = new Date().getTime();

        return 'sort=' + sort +
               '&dir=' + dir +
               '&startIndex=' + startIndex +
               '&results=' + (startIndex + results) +
               '&nombre=' + nombre +
               '&temp='+forceIERequest;
               
    },
    recargarData: function() {
        var self = this;
            oCallback = {
                success: self.onDataReturnInitializeTable,
                failure: self.onDataReturnSetRows,
                scope: self,
                argument: self.getState()
            };
        self.getDataSource().sendRequest(self.generarRequest(), oCallback);
        
    },
    tieneRegistros: function(){
        return this.getRecordSet().getLength()>0;
    },
     getListaDTO:function(){
        var lstTiposDocumentos = [];
        var record=null;
        for( var i = 0; i < this.getRecordSet().getLength(); i++ ){
            record = this.getRecordSet().getRecord(i);
            lstTiposDocumentos.push(record.getData());
        }
        

        return lstTiposDocumentos;
    },
    
    getListaSerializada:function(){
        var lstDocumentos = {},
            record,
            getHash = function(index, id){
                return 'lstDocumentos['+ index +'].' + id;
            };
   

        for( var i = 0; i < this.getRecordSet().getLength(); i++ ){
            record = this.getRecordSet().getRecord(i);
            lstDocumentos[getHash(i, 'idTipoDocumento')] = record.getData('idTipoDocumento');
            lstDocumentos[getHash(i, 'nombre')] = record.getData('nombre');
            lstDocumentos[getHash(i, 'descripcion')] = record.getData('descripcion');
         
            var lstEstados = record.getData('lstEstadoDocumentoDTO');
            for( var j = 0; j < lstEstados.length; j++ ){
                lstDocumentos[getHash(i,'lstEstadoDocumentoDTO['+j+'].idestadodocumentoTemp')] = lstEstados[j].idestadodocumentoTemp;
                lstDocumentos[getHash(i,'lstEstadoDocumentoDTO['+j+'].nombre')] = lstEstados[j].nombre;
                lstDocumentos[getHash(i,'lstEstadoDocumentoDTO['+j+'].descripcion')] = lstEstados[j].descripcion;
            }
        
    }

        return lstDocumentos;
    }, 
     agregarFila : function(fila){

     var existeFila = false;
        for( var i = 0; i < this.getRecordSet().getLength(); i++ ){
            record = this.getRecordSet().getRecord(i);
            if(fila.idTipoDocumento  ==record.getData('idTipoDocumento')){
                
                existeFila = true;
                
                record.getData().nombre =   fila.nombre ;
                record.getData().descripcion =   fila.descripcion ;
                record.getData().lstEstadoDocumentoDTO =   fila.lstEstadoDocumentoDTO ;
                
                break;
            }      
        }
        
        
        if(existeFila == false){
            this.addRow(fila);
        }
  
    }
    
   
});